#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,num[105],mx[105],cnt;
ll a[105],ans=1e18;
map<vector<int>, ll> f;
void dfs(int d,vector<int> vec,ll sum);
void zy(int d,int sz,int res,vector<int> vec,ll sum,int lf)
{
    if(mx[d+1]>n-vec[n/k] || res>lf) return;
    if(res==0)
    {
        dfs(d+1,vec,sum);
        return;
    }
    if(sz==0)
    {
        if(res<=vec[0])
        {
            vec[1]+=res,vec[0]-=res,sum-=res*a[d];
            dfs(d+1,vec,sum);
        }
        return;
    }
    for(int i=min(res,vec[sz]);i>=0;i--)
    {
        vec[sz]-=i,vec[sz+1]+=i;
        zy(d,sz-1,res-i,vec,sum+(sz==n/k-1)*i*a[d],lf-vec[sz]);
        vec[sz]+=i,vec[sz+1]-=i;
    }
}
void dfs(int d,vector<int> vec,ll sum)
{
    if(mx[d]>n-vec[n/k] || sum>=ans || (f.find(vec)!=f.end() && sum>=f[vec])) return;
    //cout<<d<<' ';
    //for(int i=0;i<=2;i++) cout<<vec[i]<<' ';
    //cout<<sum<<'\n';
    f[vec]=sum;
    if(d==cnt+1)
    {
        ans=min(ans,sum);
        return;
    }
    zy(d,n/k-1,num[d],vec,sum,n-vec[n/k]);
}
int main()
{
    vector<int> vec;
    freopen("diyiti.in","r",stdin);
    freopen("diyiti.out","w",stdout);
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
    a[0]=-1e9;
    for(int i=1;i<=n;i++)
    {
        if(a[i]!=a[i-1]) a[++cnt]=a[i];
        num[cnt]++;
    }
    for(int i=cnt;i>=1;i--) mx[i]=max(mx[i+1],num[i]);
    vec.push_back(k);
    for(int i=1;i<=n/k;i++) vec.push_back(0);
    dfs(1,vec,0);
    if(ans==1e18) cout<<"-1\n";
    else cout<<ans<<'\n';
    return 0;
}
